package com.springai.demo.tools;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.ai.chat.model.ToolContext;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.util.StringUtils;

/**
 * @author hh
 * @since 2025/7/20
 */
public class UserInfoTools {

    private static final Logger log = LoggerFactory.getLogger(UserInfoTools.class);

    /**
     * Spring AI 支持通过 ToolContext API 向工具传递额外的上下文信息。该特性允许提供补充数据，比如用户身份信息。
     * 这些数据将与 AI 模型传递的工具参数结合使用。
     * 默认情况下，工具调用的返回值会再次回传到 AI 模型进一步处理。但在一些场景中需要将结果直接返回给调用方而非模型，比如数据搜索。
     */
    @Tool(description = "根据用户id获取当前用户的名称", returnDirect = true)
    public String getUserName(ToolContext toolContext) {
        log.info("执行getUserName工具方法");
        String userId = ((String) toolContext.getContext().get("userId")).toString();
        if (!StringUtils.hasText(userId)) {
            return "null";
        }
        // 模拟数据
        return userId + ": hh";
    }
}
